home *** CD-ROM | disk | FTP | other *** search
/ Danny Amor's Online Library / Danny Amor's Online Library - Volume 1.iso / html / faqs / faq / de-amiga-faq / part1 next >
Encoding:
Text File  |  1995-07-25  |  64.6 KB  |  1,527 lines

  1. Subject: German Amiga-FAQ (Haeufig gestellte Fragen) (Part 1 of 2)
  2. Newsgroups: de.comp.sys.amiga.misc,zer.z-netz.rechner.amiga.allgemein,de.answers,news.answers
  3. From: kellerer@informatik.tu-muenchen.de (Ignaz Kellerer)
  4. Date: 22 Nov 1994 17:04:54 GMT
  5.  
  6. Posted-By: auto-faq 2.4
  7. Archive-name: de-amiga-faq/part1
  8. Last-modified: Dienstag, den 22. Oktober 1994
  9. Posting-Frequency: biweekly
  10. Posting-Frequency: Alle zwei Wochen (biweekly)
  11.  
  12.  
  13.         Häufig gestellte Fragen (FAQ) zum Amiga [1/2]
  14.           ----------------------------------------------
  15.  
  16. Es folgt eine Liste häufig gestellter Fragen (FAQ = Frequently asked
  17. questions). Sie ist vor allem für neue Anwender gedacht, aber
  18. möglicherweise finden auch erfahrene Anwender Interessantes. Dies ist
  19. Teil 1, der zweite beginnt mit Kapitel 5.
  20.  
  21. Die Liste ist in Ascii-Format, damit sie von jedem gelesen werden kann.
  22. Sie ist auch in AmigaGuide-, Dvi- und html-Format (für WWW-Server) erhältlich
  23. als Teil des Amiga-FAQ-Archivs. (Datei docs/misc/AmigaFAQg.lha auf dem Aminet)
  24.  
  25. Bitte beachten Sie das Folgende:
  26.  
  27.   - Änderungen der letzten zwei Wochen sind markiert.
  28.     !    diese Zeile bzw. dieser Abschnitt wurden geändert
  29.     +    diese Zeile ist neu
  30.     <    vor dieser Zeile wurde etwas gelöscht
  31.  
  32.   - Ein Index ist am Ende des zweiten Teils. Wenn auch dies nicht
  33.     weiterhilft: Bitte schicken Sie mir eine E-Mail. Vielleicht kann
  34.     ich eine Antwort in die FAQ aufnehmen.
  35.  
  36.   - Vorschläge, Beiträge, Kritik und Bierflaschen sind sehr
  37.     willkommen. :-)
  38.  
  39.         Ignaz Kellerer
  40.         Georg-Habel-Str. 11
  41.       81241 München (Germany)
  42.         Tel. (+49) 089 / 885147
  43.  
  44.         Internet: kellerer@informatik.tu-muenchen.de
  45.  
  46. ==========================(Schnipp-Schnapp)===================================
  47.  
  48.   Amiga-FAQ
  49.   *********
  50.   
  51.      Dieses Dokument enthält einige häufig gestellte Fragen und
  52.   versucht, Antworten zu geben. Seine Absicht ist es, neuen Benutzern zu
  53.   helfen und die Zahl der News-Artikel zu reduzieren, die erfahrene
  54.   Benutzer nicht mehr sehen wollen.
  55.   
  56.      Bitte beachten Sie, daß viele Abschnitte bis jetzt noch fast
  57.   völlig leer sind. Ich verstehe von den betreffenden Abschnitten nichts
  58.   und habe nicht das Gefühl, als ob ich daran etwas ändern könnte.
  59.   Damit sind Sie an der Reihe: Füllen Sie die Lücken und teilen Sie mir
  60.   mit, was man hier noch aufnehmen kann!
  61.   
  62.  
  63.   Disclaimer
  64.  
  65.   1 Hardware
  66.     1 Was sind 68EC020, 68EC030 und 68LC040?
  67.     2 Was ist ein mathematischer Coprozessor (FPU) ?
  68.     3 Kann ich eine 3.5"-Festplatte im A1200 verwenden?
  69.  
  70.   2 Das Betriebssystem
  71.     1 Kann ich eine andere als die eingebaute Kickstart benutzen?
  72.     2 Was entspricht unter AmigaDOS dem . (Aktuelles Directory)?
  73.     3 Der Queue-Handler PIPE:
  74.       1 Verwendung von PIPE: in einer AmigaShell
  75.       2 Das Pipe-Kommando
  76.       3 Das Pipe-Kommando in der AmigaShell
  77.       4 Die _mchar-Variable
  78.       5 Bekannte Probleme
  79.  
  80.   3 Programmierung
  81. !   1 Was ist die beste Dokumentation für Programmierer?
  82. !   2 Was ist CATS?
  83.     3 Wo bekomme ich die Amiga-Include-Dateien?
  84.     4 Wie werde ich Developer?
  85.     5 Was für Compiler (und Assembler) gibt es?
  86.     6 Warum funktioniert keine Esc-Sequenz?
  87.     7 Kann ich AmigaBasic auf dem A1200 verwenden?
  88.     8 Wie lokalisiere ich mein Programm?
  89.     9 Wie erhält man einen Zeiger auf das Fenster einer Konsole?
  90.     10 Was sind Pragmas?
  91.     11 Mein Compiler/Linker vermißt Symbole.
  92.     12 Wie erfahre ich, was für Funktionen es gibt?
  93.     13 Der GNU C Compiler: Allgemeine Informationen und Installation
  94.       1 Aktuelle Version
  95.       2 Hardwareanforderungen
  96.       3 Wer hat es gemacht?
  97.       4 Wo finde ich die gcc-Quelltexte?
  98.       5 Inline-Dateien
  99.       6 Wie konvertiere ich die Amiga-Libraries für den gcc?
  100.       7 Wie installiere ich den gcc?
  101.       8 Kompilieren
  102.       9 Wichtige Informationsquellen
  103.  
  104.   4 Anwendungen
  105.     1 Text-Editoren
  106.     2 Was für Textverarbeitungsprogramme gibt es?
  107.     3 Desktop Publishing
  108.     4 Was ist TeX und wo bekomme ich es?
  109.     5 Gibt es PostScript-Interpreter auf dem Amiga?
  110.  
  111.   5 Grafik
  112.     1 Was heißt Chunky- und Planar-Display?
  113.     2 Was ist Doublebuffering?
  114. !   3 Was für Monitore arbeiten am Amiga 1200 oder 4000?
  115.  
  116.   6 Emulationen
  117.     1 Kann ich meinen Amiga unter Unix benutzen?
  118.     2 Ist es möglich, den Amiga als X11-Terminal zu benutzen?
  119.     3 Wie kann ich MS-Dos-Programme starten?
  120.     4 MsDos-formatierte Wechselplatten am Amiga verwenden
  121.  
  122.   7 Verschiedenes
  123.     1 Gibt es eine Unix-Version von LhA?
  124.     2 Was sind Dateien, die mit ... enden?
  125. !   3 Gibt es ein Programm wie Stacker, um die Hard-Disk zu packen?
  126. !   4 Wo bekomme ich Fish-Disk xxx?
  127.     5 Wie füllt man die Tintenkartuschen der HPDeskjet-Drucker nach?
  128.     6 Was ist MUI und wo bekomme ich es?
  129.  
  130.   8 Software-Quellen und andere Informationen?
  131.     1 Dateien und Datenbanken zur frei kopierbaren Software
  132.     2 Eine Sammlung von Testberichten
  133.     3 Empfangen von Dateien von einem FTP-Server
  134.     4 Empfangen von Dateien von einem Mail-Server
  135.     5 Empfangen von Dateien von einer Mailbox
  136.     6 Die Fish-PD-Serie
  137.       1 Die Amiga-Library-Disks
  138.       2 Die Fresh-Fish-Serie
  139.     7 Wie kann ich MS-Dos-Disketten lesen und schreiben?
  140.     8 Wie transportiere ich sehr große Dateien
  141.     9 Diskussionen über Mail
  142.     10 Andere FAQ's
  143.  
  144.   Das Amiga-FAQ-Archiv
  145.  
  146.   Beiträge zur Amiga-FAQ
  147.  
  148.   Danksagungen
  149.  
  150.   Index
  151.  
  152.  
  153.  
  154.   Disclaimer
  155.   **********
  156.   
  157.      Diese Datei steht unter dem
  158.   
  159.        Copyright (C)  Ignaz Kellerer
  160.                        Georg-Habel-Str. 11
  161.                  81241 München (Deutschland)
  162.                        Tel. (+49) 089 / 885147
  163.                        Internet: kellerer@informatik.tu-muenchen.de
  164.   
  165.      Es ist erlaubt, sowohl veränderte als auch unveränderte Kopien
  166.   dieser Datei herzustellen und zu verteilen, vorausgesetzt, daß dabei
  167.   die Bestimmungen der "GNU General Public License" eingehalten werden und
  168.   die Copyright-Notiz sowie diese Erlaubnis unverändert auf allen Kopien
  169.   enthalten sind.
  170.   
  171.      Der Autor gibt *absolut keine* Garantie, daß die hier gegebenen
  172.   Antworten korrekt sind. Einige dieser Antworten sind von anderen
  173.   Benutzern beigetragen worden und ich habe teilweise nicht einmal die
  174.   Möglichkeit, auch nur die einfachsten Tests durchzuführen.
  175.   Vorschläge, weitere Beiträge, neue Fragen und Antworten, Kritik und
  176.   Beschimpfungen (oh, wie ich mein `nil:' liebe :-) sind aber sehr
  177.   willkommen.  Siehe Beiträge.
  178.   
  179.   1 Hardware
  180.   **********
  181.   
  182.      Dieses Kapitel enthält Fragen zur Amiga-Hardware.
  183.   
  184.   1.1 Was sind 68EC020, 68EC030 und 68LC040?
  185.   ==========================================
  186.   
  187.      Motorola, die Herstellerfirma der 680x0-Familie, bietet auch
  188.   gestutzte Versionen ihrer Prozessoren an. Diese sind etwas
  189.   preisgünstiger als die Originale, weshalb Commodore auch den 68EC020 in
  190.   den A1200 und den 68EC030 in den A4000/030 einbaut. Dafür können sie
  191.   aber auch etwas weniger.
  192.   
  193.      Der Unterschied zwischen 68020 und 68EC020 ist, daß letzterer nur
  194.   16MB Speicher adressieren kann. (Das ist der Grund, warum der A1200 nur
  195.   maximal 10MB RAM haben kann.) In den meisten Fällen sollte man den
  196.   Unterschied aber gar nicht bemerken.
  197.   
  198.      Das ist beim 68EC030 anders: Viele Benutzer werden feststellen, daß
  199.   der 68030 eine MMU (Memory management unit) hat und der 68EC030 nicht.
  200.   (Beim 68020 gibt es noch die Möglichkeit, eine externe MMU, den 68851
  201.   nachzurüsten.) Es gibt einige wichtige Programme, die eine MMU
  202.   brauchen, z.B. Enforcer (ein Hilfsprogramm zur Fehlersuche), GigaMem
  203.   (ein Programm zur Emulation von virtuellem RAM) oder alle aktuellen
  204.   Unix-Versionen (siehe Unix). Wer eines dieser Programme verwenden will
  205.   und keinen A4000 oder A3000 hat, braucht deshalb eine Prozessorkarte
  206.   mit einem 68030 oder 68040.
  207.   
  208.      Der 68LC040 ist ein 68040 ohne FPU. Siehe FPU.
  209.   
  210.   1.2 Was ist ein mathematischer Coprozessor (FPU) ?
  211.   ==================================================
  212.   
  213.      Die Prozessoren 68000 bis 68030 bieten ausschließlich Integer (=
  214.   Ganzzahl) Arithmetik. Floating-Point (Fließkomma) Operationen werden
  215.   über eine Befehlssequenz ausgeführt. Floating-Point Units (FPUs) bzw.
  216.   mathematische Koprozessoren sind für diese Aufgaben optimiert.
  217.   
  218.      Im wesentlichen kann man drei FPU-Typen unterscheiden: Den 68881,
  219.   68882 und die interne FPU des 68040. Aufgrund der Trennung von
  220.   Arithmetikeinheit und Konvertierlogik (notwenig zur Konversion
  221.   anliegender Zahlenformate in das prozessoreigene 80bit-Format) ist die
  222.   68882 FPU bis zu 1.5 mal schneller als die 68881. Die interne FPU des
  223.   68040 besitzt darüber hinaus eine dreistufige Pipeline, allerdings
  224.   sind in ihr nicht alle Befehle der 68881/68882 realisiert. Die
  225.   fehlenden (trigonometrischen) Befehle werden per Software emuliert
  226.   (z.B. über die 68040.library).
  227.   
  228.      Für viele Programme (Raytracing, DTP, Mathematik, TeX) existieren
  229.   spezielle Coprozessorversionen. Je nach Auslastungsgrad kann damit eine
  230.   Geschwindigkeitssteigerung bis zum Faktor 50 erreicht werden.
  231.   
  232.      Michael Kaiser (kaiser@ira.uka.de)
  233.   
  234.   1.3 Kann ich eine 3.5"-Festplatte im A1200 verwenden?
  235.   =====================================================
  236.   
  237.      Viele Leute würden statt der im A1200 üblichen 2.5"-Festplatten
  238.   lieber eine 3.5"-Festplatte verwenden, da diese viel billiger sind. Das
  239.   ist auch möglich, allerdings braucht man ein spezielles Kabel, um die
  240.   Festplatte an den eingebauten IDE-Controller anzuschließen. Außerdem
  241.   sollte man isolierendes Material zwischen die Festplatte und die
  242.   Platine schieben. Es gibt Berichte über thermische Probleme, aber ich
  243.   habe nichts davon bemerkt.
  244.   
  245.      Einige Händler bieten für ca. 40-50DM Kabel, Isoliermaterial und
  246.   Informationen an, was sicherlich empfehlenswert ist. In den üblichen
  247.   Magazinen sollte man diesbezügliche Anzeigen finden.
  248.   
  249.      Thomas Schuh (thomas@stepout.tynet.sub.org)
  250.   
  251.   2 Das Betriebssystem
  252.   ********************
  253.   
  254.      Dieses Kapitel behandelt Fragen sowohl zum Betriebssystem Kickstart
  255.   als auch zur Oberfläche Workbench.
  256.   
  257.   2.1 Kann ich eine andere als die eingebaute Kickstart benutzen?
  258.   ===============================================================
  259.   
  260.      Zunächst ein paar Worte zur Legalität der Benutzung einer anderen
  261.   Kickstart: Es ist *nicht* erlaubt, Kopien von Kickstarts fremder
  262.   Computer zu erstellen und auf einem anderen Computer zu benutzen! (Es
  263.   ist sogar fraglich, ob man das auf eigenen Maschinen darf, wenn man
  264.   mehr als einen Amiga hat.)
  265.   
  266.      Natürlich ist es möglich und für gewisse Personen (z.B. Developer,
  267.   siehe Developer) auch erlaubt.  Es gibt zwei verschiedene
  268.   Möglichkeiten, eine Hardware- und eine Softwarelösung. Erstere ist,
  269.   eine Platine in den Computer einzubauen, die sowohl die eigene als auch
  270.   eine andere Kickstart aufnehmen kann, zwischen denen man dann
  271.   umschalten kann.
  272.   
  273.      Die Softwarelösung benötigt ein Programm (einen sogenannten
  274.   Softkicker) und die Kopie der anderen Kickstart. Der Softkicker
  275.   alloziert RAM, lädt die Kickstart-Kopie in dieses RAM und führt einen
  276.   Reset aus. Natürlich fehlt dann nach dem Reboot unter der neuen
  277.   Kickstart etwas RAM: 256KB weniger für Kickstart 1.2 oder 1.3 und
  278.   512KB für die neueren Kickstarts.  Es gibt verschiedene Softkicker,
  279.   von denen einige eine MMU benötigen (siehe 68EC0xx). Ich empfehle
  280.   SKick 3.43 (Aminet, Directory `util/boot') empfehlen, das keine MMU
  281.   braucht und viele verschiedene Kickstarts unterstützt. Die Kopie des
  282.   ROM zu erzeugen ist mit einem Programm wie dem Folgendem möglich:
  283.   
  284.            #include <stdio.h>
  285.        
  286.            #define kickorig 0xf80000   /*  0xfc0000 für Kick 1.2 und 1.3   */
  287.            #define kicklen  0x080000   /*  0x040000 für Kick 1.2 und 1.3   */
  288.        
  289.            void main(int argc, char*argv[])
  290.            {
  291.                FILE *fh;
  292.        
  293.                if ((fh = fopen("kickstart.file", "w"))  !=  NULL) {
  294.                    result = fwrite(kickorig, kicklen, 1, fh);
  295.                }
  296.                fclose(fh);
  297.            }
  298.   
  299.   2.2 Was entspricht unter AmigaDOS dem . (Aktuelles Directory)?
  300.   ==============================================================
  301.   
  302.      Unter AmigaDOS entspricht dem . (der das aktuelle Directory unter
  303.   Unix und gewissen nicht-reentranten Interrupt-Handlern repräsentiert)
  304.   der leere String, den man als "" schreibt.
  305.   
  306.      Beispiel:
  307.                COPY S:Startup-Sequence ""
  308.   
  309.   Dies kopiert Ihre Startup-Sequence in das aktuelle Directory.
  310.   
  311.      Es gibt verschiedene Programme, die AmigaDOS so patchen, daß es .
  312.   und .. wie unter Unix akzeptiert, z.B. UnixDirs. (Aminet,
  313.   `os20/util/UnixDirsII.lha' oder Fish-Disk 837)
  314.   
  315.      Arno Eigenwillig (arno@yaps.dinoco.de)
  316.   
  317.   2.3 Der Queue-Handler PIPE:
  318.   ===========================
  319.   
  320.      In AmigaOS 2.04 wurde ein neuer Handler eingeführt, der es erlaubt,
  321.   Daten zwischen verschiedenen Programmen auszutauschen. Dieser Handler
  322.   heißt `L:Queue-Handler', ist aber besser als `PIPE:' bekannt.
  323.   
  324.      `PIPE:' implementiert eine echte, Unix-artige `Pipe', mit der man
  325.   die Standardausgabe eines Programms als Standardeingabe eines anderen
  326.   Programms verwenden kann. Es ist auch möglich, mehrere Programme über
  327.   mehrere Pipes gleichzeitig zu verketten.  Pipes brauchen weniger RAM
  328.   für temporäre Dateien, und der Zugriff ist schneller.
  329.   
  330.      Allerdings unterscheidet sich `PIPE:' von Unix-Pipes in zwei
  331.   wesentlichen Punkten:
  332.     1. Es handelt sich um ein Device; die Ein- und Ausgabe von Programmen
  333.        muß also nicht unbedingt eine Datei sein, obwohl das meistens der
  334.        Fall ist. Man kann auch `PIPE:' wie andere Devices verwenden, aber
  335.        natürlich weder Directories lesen noch Seek-artige Zugriffe
  336.        durchführen.
  337.   
  338.     2. Es gibt keine Flush-Operation. Wenn nicht alle Daten gelesen
  339.        wurden, die in `PIPE:' geschrieben wurden, dann bleiben sie
  340.        stehen, bis sie evtl. von einem anderen Programm gelesen werden.
  341.        Man muß also Pipes immer leeren, bevor man sie schließt.
  342.   
  343.     3. Aus demselben Grund kann ein Programm blockiert werden, wenn es
  344.        die interne Puffergröße überschreibt. Auch dies wird durch
  345.        rechtzeitiges Leeren der Pipe vermieden.
  346.   
  347.      Der Handlername von PIPE: ist vollständig
  348.   `PIPE:name/bufsize/bufnum', wobei `name' den verwendeten Pipekanal
  349.   identifiziert und eindeutig sein sollte. Durch verschiedene Namen kann
  350.   man also gleichzeitig mehrere Pipe-Kanäle öffnen. Die optionalen
  351.   Argumente `bufsize' und `bufnum' geben die Größe und Anzahl der
  352.   verwendeten Datenpuffer an. Meist schreibt man einfach `PIPE:name', die
  353.   Vorgabegröße ist dann 4096 Bytes und die Anzahl unbegrenzt.
  354.   
  355.      Osma Ahvenlampi (Osma.Ahvenlampi@hut.fi)
  356.   
  357.   2.3.1 Verwendung von PIPE: in einer AmigaShell
  358.   ----------------------------------------------
  359.   
  360.      Zunächst muß `PIPE:' natürlich mit `Mount' angemeldet sein.  Dies
  361.   kann durch das Kommando
  362.            1> Mount PIPE:
  363.   
  364.   in der Shell geschehen, ab AmigaOS 2.1 auch dadurch, daß man die Datei
  365.   `PIPE' nach `DEVS:DosDrivers' schiebt.
  366.   
  367.      In einem AmigaShell-Fenster kann man dann folgende Kommandos
  368.   eingeben:
  369.            1> Run List SYS: >PIPE:Listoutput
  370.            1> More <PIPE:Listoutput
  371.   
  372.   (1)
  373.   
  374.      Diese beiden Kommandos erzeugen also zunächst eine Liste der Dateien
  375.   in `SYS:' und geben diese dann mit Hilfe des More-Kommandos aus.  Man
  376.   könnte auch folgendes probieren:
  377.            1> Run List SYS: NOHEAD >PIPE:Listoutput
  378.            1> Run Sort PIPE:Listoutput PIPE:Sortedoutput
  379.            1> More <PIPE:Sortedoutput
  380.   
  381.   Dies würde also die Liste vor der Ausgabe noch sortieren.
  382.   
  383.      Beachten Sie die Verwendung von `Run' außer für das jeweils letzte
  384.   Programm, durch die alle Programme gleichzeitig ablaufen.  Man kann
  385.   auch die Programme gleichzeitig in verschiedenen Shells ablaufen lassen.
  386.   
  387.      Das Leeren der Pipe kann auch manuell geschehen, vorausgesetzt man
  388.   kennt den Namen des verwendeten Kanals, indem man folgendes eingibt:
  389.            1> Type PIPE:name TO NIL:
  390.   
  391.      ---------- Footnotes ----------
  392.   
  393.      (1)  Dabei `1>' der Prompt der AmigaShell, die eine Eingabe
  394.   erwartet. Die Nummer kann natürlich variieren.
  395.   
  396.   2.3.2 Das Pipe-Kommando
  397.   -----------------------
  398.   
  399.      Im vorigen Beispiel ist die Verwendung von Pipes recht kompliziert,
  400.   vor allem verglichen mit Unix-Pipes. Es gibt aber eine bessere
  401.   Möglichkeit.
  402.   
  403.      Andy Finkel, der früher bei Commodore gearbeitet hat, hat auch ein
  404.   Kommando `Pipe' geschrieben (was man nicht mit `PIPE:' verwechseln
  405.   sollte!), das die Benutzung von Pipes stark vereinfacht.
  406.   Unglücklicherweise wurde dieses Programm letzten Endes dann doch nicht
  407.   in die offizielle Workbench aufgenommen, allerdings mit Billigung von
  408.   Commodore veröffentlicht (Quellen: Fish-Disk 637, Aminet,
  409.   `util/cli/finkelshelltools.lha'). Dieses Programm arbeitet auch unter
  410.   OS3.1 noch problemlos.
  411.   
  412.      Die Verwendung des Pipe-Kommandos ist einfach. Man übergibt die
  413.   auszuführenden Programme als Argumente an Pipe, getrennt durch das
  414.   Zeichen |, z.B.
  415.            1> Pipe List SYS: | More
  416.                oder
  417.            1> Pipe List: SYS: NOHEAD | Sort IN: OUT: | More
  418.   
  419.   Beachten Sie die Verwendung von `IN:' und `OUT:', die nötig sind, weil
  420.   das Sort-Kommando nicht von der Standardeingabe lesen und nicht auf die
  421.   Standardausgabe schreiben kann. Diese Devices werden durch das
  422.   Kommandos Pipe simuliert. Durch die Environment-Variable _PCHAR kann
  423.   man auch ein anderes Zeichen anstelle von | verwenden.
  424.   
  425.   2.3.3 Das Pipe-Kommando in der AmigaShell
  426.   -----------------------------------------
  427.   
  428.      Es gibt ein sehr nützliches, allerdings undokumentiertes Feature
  429.   der AmigaShell: Diese kennt das Pipe-Kommando! Ist die lokale Variable
  430.   _PCHAR gesetzt, dann kann man Pipes sogar ohne Eingabe des
  431.   Pipe-Kommandos benutzen. Die Shell erkennt das durch _PCHAR vorgegebene
  432.   Zeichen und ruft für Kommandozeilen, die es enthalten, automatisch
  433.   Pipe auf.
  434.   
  435.      Am besten wird das folgende Kommando in `s:Shell-Startup'
  436.   eingetragen:
  437.            1> Set _pchar "|"
  438.   
  439.   (1) Man kann die vorigen Beispiele dann so ausführen:
  440.            1> List SYS: | More
  441.                oder
  442.            1> List SYS: NOHEAD | Sort IN: OUT: | More
  443.   
  444.      Dies entspricht also völlig den Unix-Pipes.
  445.   
  446.      ---------- Footnotes ----------
  447.   
  448.      (1)  Die Anführungsstriche sind wesentlich! Wenn _PCHAR bereits
  449.   gesetzt ist, wird sonst angenommen, es handele sich bereits um einen
  450.   Aufruf von Pipe. Dies kann etwa dann geschehen, wenn aus einer Shell
  451.   eine neue gestartet wird.
  452.   
  453.   2.3.4 Die _mchar-Variable
  454.   -------------------------
  455.   
  456.      Die lokale Variable _mchar legt das Zeichen fest, das als
  457.   Kommandotrenner dient. Setzt man also
  458.            1> Set _mchar ";"
  459.      dann kann man in der Shell die Befehle hintereinanderfügen, durch
  460.   den Strichpunkt getrennt.
  461.   
  462.   2.3.5 Bekannte Probleme
  463.   -----------------------
  464.   
  465.   *F:*
  466.        Ich bekomme die Fehlermeldung
  467.                 PIPE: Unknown command
  468.   
  469.        wenn ich das Kommando `List SYS: | More' ausführe, obwohl `PIPE:'
  470.        mit `Mount' angemeldet ist. Was ist falsch?
  471.   
  472.   *A:*
  473.        Die Shell sucht nach dem Kommando `Pipe' in der Fehlermeldung,
  474.        nicht nach dem `PIPE:'-Device. Dieses Kommando ist also nicht im
  475.        Suchpfad (meist in `C:') installiert.
  476.   
  477.   *F:*
  478.        Ein Requester meldet
  479.                 Please insert volume PIPE: in any drive
  480.   
  481.        wenn ich eines der Kommandos aus den Beispielen ausführen will.
  482.   
  483.   *A:*
  484.        `PIPE:' ist nicht angemeldet. Dies kann mit `Mount PIPE:'
  485.        geschehen.
  486.   
  487.   *F:*
  488.        Wenn ich eines der Beispiele ausführe, dann eröffnet das
  489.        `More'-Kommando ein Fenster, aber dort erscheint nichts/ eine
  490.        Fehlermeldung erscheint/ein Filerequester erscheint.
  491.   
  492.   *A:*
  493.        Sie verwenden ein anderes More-Kommando als das aus der Workbench.
  494.        Verwenden Sie einen anderen Namen oder installieren Sie ein More,
  495.        das Pipes unterstützt, z.B. das More von Commodore, Less oder
  496.        Most.
  497.   
  498.   3 Programmierung
  499.   ****************
  500.   
  501.      In diesem Kapitel finden vermutlich nur Programmierer Interessantes.
  502.   
  503. ! 3.1 Was ist die beste Dokumentation für Programmierer?
  504. ! ======================================================
  505.   
  506.      Die beste verfügbare Dokumentation sind sicherlich die RKM's (ROM
  507.   Kernel Manuals, die schwarzen) von Commodore. Sie werden von
  508.   Addison-Wesley veröffentlicht.
  509.        The Amiga ROM Kernel Manual:  Libraries, ISBN 0-201-56774-1
  510.        The Amiga ROM Kernel Manual:  Devices, ISBN 0-201-56775-X
  511.        The Amiga ROM Kernel Manual:  Includes and Autodocs, ISBN
  512.                                                             0-201-56773-3
  513.        The Amiga Hardware Manual, ISBN 0-201-56776-8
  514.        The Amiga User Interface Style Guide, ISBN 0-201-57757-7
  515.   
  516.   Vor allem die Libraries sind ein Muß. Weniger nützlich sind die
  517.   Includes und Autodocs: Sie sind auf Diskette als Online-Hilfe sicher
  518.   nützlicher.  Siehe Include-Dateien.
  519.   
  520.      AmigaDOS wird in diesen Büchern kaum behandelt. Die Autodocs geben
  521.   einige Informationen, aber um tiefer einzusteigen braucht man das
  522.        The AmigaDOS Manual, 3rd Edition, ISBN 0-553-35403-5
  523.   
  524.   ebenfalls von Commodore, das von Bantam Books herausgegeben wird.
  525.   
  526.      Eine gute Wahl ist auch
  527.        The Amiga Guru Book
  528.   
  529.   von Ralph Babel. Das Buch beginnt mit einem ca. 250-seitigen
  530.   allgemeinen Überblick über verschiedenste Aspekte der Programmierung
  531.   des Amiga. Für Anfänger dürften vor allem die Abschnitte über die
  532.   Amiga-Datentypen sowie die Amiga-Includes und die amiga.lib interessant
  533.   sein, aber auch Erfahrene finden hier mit Sicherheit noch Neues, was
  534.   zum Teil nicht einmal in den RKM's enthalten ist. Den größten Teil
  535.   des Buches nehmen aber 500 Seiten nur zu AmigaDOS ein. Dieser Teil ist
  536.   meines Erachtens der wichtigste, weil das AmigaDOS-Manual der
  537.   schlechteste Teil der offiziellen Dokumentation ist. Das Buch ist sehr
  538.   dicht geschrieben und deshalb weniger leicht lesbar als die RKM's, aber
  539.   ich empfehle es als Zusatz und vor allem anstelle des AmigaDOS-Manuals.
  540.   (Allerdings ist das Guru-Buch kein Ersatz für die Libraries & Devices,
  541.   die hier nicht behandelt werden.) Unglücklicherweise hat das Buch
  542.   keine ISBN-Nummer und ist deshalb nur bei den folgenden Adressen
  543.   erhältlich:
  544.   
  545. !                                  Almathera Systems Limited
  546. !                                  Southerton House
  547. !      NBG USA, Inc.               Boundary Business Court
  548. !      482 Holly Avenue            92-94 Church Road
  549. !      St. Paul, MN 55102          Mitcham, Surrey CR4 3TD
  550. !      USA                         England
  551. !      Voice: +1 (612) 290 9447    Voice: +44 181 687 0040
  552. !      Fax:   +1 (612) 290 9449    Fax:   +44 181 687 0490
  553. !                                  E-Mail: <almathera@cix.compulink.co.uk>
  554. !      
  555. !                                  Stefan Ossowskis Schatztruhe
  556. !      Hirsch & Wolf OHG           Gesellschaft für Software mbH
  557. !      Mittelstraße 33             Veronikastraße 33
  558. !      D-56564 Neuwied             D-45131 Essen
  559. !      Germany                     Germany
  560. !      Voice: +49 (2631) 8399-0    Voice: +49 (201) 788778
  561. !      Fax:   +49 (2631) 8399-31   Fax:   +49 (201) 798447
  562. !                                  E-Mail: <stefano@tchest.e.eunet.de>
  563. !      
  564. !      Someware
  565. !      27 rue Gabriel Péri
  566. !      59186 Anor
  567. !      France
  568. !      Voice: +33 27596000
  569. !      Fax:   +33 27595206
  570. !      E-Mail: <didierj@swad.someware.com>
  571.   
  572.      Für weitere Informationen empfehle ich auch die FAQ von Marc Atkins
  573.   über Bücher zum Thema Amiga, die alle 4 Wochen in
  574.   `comp.sys.amiga.misc' erscheint.
  575.   
  576. ! 3.2 Was ist CATS?
  577. ! =================
  578.   
  579.      Dies ist eine Abteilung von Commodore West Chester, die früher
  580.   `Commodore Amiga Technical Support' hieß und später in `Commodore
  581.   Application and Technical Support' umbenannt wurde. Die Mitglieder
  582.   arbeiten unabhängig von der Entwicklungsabteilung, aber eng mit ihr
  583.   zusammen, und versuchen, Entwicklern außerhalb von Commodore beim
  584.   Erstellen guter Amiga-Anwendungen zu helfen, sei das eine Hard- oder
  585.   Software. Dazu hat CATS eine Menge an Informationen und Tools
  586.   gesammelt, auf Floppy, CD oder Papier. Ein großer Teil dieses
  587.   Materials ist auch der Allgemeinheit, d. h. für Nicht-Developer
  588.   zugänglich. Aber bitte CATS nicht mit einer Hotline verwechseln!
  589.   
  590.      Amerikaner können das Material von
  591. !          CATS
  592. !          Commodore Electronics Limited
  593. !          950 Rittenhouse Road
  594. !          Norristown, PA 19403
  595.   
  596.   bekommen, der Distributor für ganz Europa ist die
  597.            Fa. Hirsch & Wolf
  598.            Mittelstr. 33
  599.            56564 Neuwied
  600.            Tel. 02631/83990
  601.   
  602.      Dr. Peter Kittel, peterk@cbmger.de.so.commodore.com
  603.   
  604.   3.3 Wo bekomme ich die Amiga-Include-Dateien?
  605.   =============================================
  606.   
  607.      Der einzige legale Weg, die Include-Dateien und die AutoDocs zu
  608.   bekommen (und Sie sollten sie bekommen, sie sind *sehr* nützlich!),
  609.   ist, Developer zu werden (siehe siehe Developer) oder das sogenannte
  610.   `NDU' (Native developers update kit, auch als `NDUK', `NDK' bekannt oder
  611.   `ADU' für Amiga Developer Update) bei CATS zu kaufen. Siehe CATS. Es
  612.   kostet etwa 50DM, was sicher ein fairer Preis ist. Dabei handelt es
  613.   sich um ein 5-Disketten-Set, das neben den aktuellen Includes und
  614.   AutoDocs auch Tools für Programmierer, z.B. Enforcer, Mungwall, Sushi
  615.   und die debug.libg (zum Debuggen) sowie anderes, z.B. CatComp (siehe
  616.   Lokalisierung) oder Report (für Bug-Reports oder Vorschläge an
  617.   Commodore) enthält. Die aktuelle Version ist 3.1 und für
  618.   Programmierer beinahe obligatorisch.
  619.   
  620.      Wem die Includes genügen, der kann diese über ein Update seines
  621.   Compilers (nur kommerzielle Compiler) oder von den Fish-CDs bekommen.
  622.   Siehe Fish-CD.
  623.   
  624.   3.4 Wie werde ich Developer?
  625.   ============================
  626.   
  627.      Um Developer zu werden, braucht man die `ADSP'-Antragsformulare
  628.   (Amiga developer support program). Um diese zu bekommen, sollte man
  629.   einen Brief an die lokale Commodore-Niederlassung schreiben und nach
  630.   diesen Papieren fragen, in denen das weitere erklärt wird. In
  631.   Deutschland ist die Adresse folgende:
  632.            Commodore
  633.            Lyoner Straße 38
  634.            60528 Frankfurt
  635.      Es gibt drei verschiedene Arten von Developern:
  636.   *Registered*
  637.        Hier bekommt man vor allem Zugang zum CBMNET (eine Art
  638.        Commodore-internes Usenet), über das man direkt mit anderen
  639.        Entwicklern auch von Commodore selber über seine Probleme
  640.        diskutieren kann. Die Jahresgebühr beträgt 150 DM, die einmalige
  641.        Aufnahmegebühr 50 DM.
  642.   
  643.   *Certified*
  644.        Dies ist die interessanteste Klasse: Man bekommt von der meisten
  645.        Systemsoftware die aktuellen Beta-Versionen (z. B. Kickstart und
  646.        Workbench) sowie die dazugehörigen Includes und AutoDocs.
  647.        Certifieds bekommen aber nicht jede Beta und in der Regel auch
  648.        keine Hardware-Beta. Man bezahlt 400 DM pro Jahr dafür und eine
  649.        einmalige Aufnahmegebühr von 100 DM.
  650.   
  651.   *Commercial*
  652.        Kommerzielle Entwickler bekommen im wesentlichen dieselben
  653.        Informationen wie die "Zertifizierten", allerdings kompletter,
  654.        sprich auch Beta-Hardware, und etwas früher. Dies hat auch seinen
  655.        Preis: 700DM pro Jahr plus einmalige Aufnahmegebühr von 100DM.
  656.   
  657.   Die Preise und die angebotenen Möglichkeiten können von Land zu Land
  658.   verschieden sein, auch gibt es meines Wissens nicht in allen Ländern
  659.   den "Registered". Ein guter Tip ist es, eine Gruppe zu bilden und damit
  660.   die Kosten zu reduzieren.
  661.   
  662.      Alle Entwickler müssen Non-disclosure agreements (`NDA')
  663.   unterzeichnen.  Diese besagen, daß sie über die erhaltenen
  664.   Informationen außerhalb von speziell dazu freigegebenen Orten oder
  665.   Kanälen nicht einmal zu anderen Entwicklern sprechen dürfen, so lange
  666.   sie nicht die explizite Erlaubnis dazu von Commodore haben.
  667.   
  668.   3.5 Was für Compiler (und Assembler) gibt es?
  669.   =============================================
  670.   
  671.      Es gibt viele Programmiersprachen auf dem Amiga, kommerzielle
  672.   Compiler ebenso wie frei kopierbare. Ich möchte nur diejenigen
  673.   aufzählen, die mir bekannt sind oder die ich aus einem anderem Grund
  674.   für erwähnenswert halte.
  675.   
  676.   *Assembler*
  677.        Alle C-Compiler beinhalten einen Assembler. Frei kopierbar und
  678.        zuverlässig sind A68K und PhxAss. (Aminet, Directory `dev/asm'
  679.        oder Fish-Disks 521 bzw. 906)
  680.   
  681.   *C*
  682.   *C++*
  683.        Frei kopierbare C-Compiler sind der `gcc' (der sein eigenes
  684.        Directory `dev/gcc' auf dem Aminet hat) und die Probeversion (mit
  685.        der man aber schon eine ganze Menge anfangen kann) von `Dice' (per
  686.        FTP von `ftp.uni-paderborn.de', Directory
  687.        `/news/comp.binaries.amiga/volume91/languages' oder auf Fish disk
  688.        491).  Der große Vorteil von gcc ist, daß man ihn auf der ganzen
  689.        Welt und auf nahezu jedem Computer findet. Ein weiterer Vorteil
  690.        ist, daß er sogar einen C++-Compiler enthält! Aber er ist
  691.        langsam und benötigt 4MB RAM oder mehr. Siehe Der GNU C Compiler.
  692.        Siehe Mail-Listen.
  693.   
  694.        Kommerzielle C-Compiler sind `Aztec-C', `Dice' und `SAS-C'.
  695.        `Aztec-C' wird jedoch leider nicht mehr weiterentwickelt.  Was die
  696.        kommerziellen Compiler auszeichnet, sind ihre hervorragenden
  697.        Source-Level-Debugger, die den anderen fehlen.
  698.   
  699.        SAS hat leider angekündigt, den Amiga-Compiler nicht weiter zu
  700.        unterstützen. Verkauft wird er aber noch, und da er gegenwärtig
  701.        noch voll aktuell ist und sogar einen Crosscompiler von C++ in C
  702.        enthält (der vom Debugger unterstützt wird), ist er meines
  703.        Erachtens derzeit das beste Angebot, insbesondere zu dem äußerst
  704.        günstigen Preis von 184.-DM für Studenten und Besitzer anderer
  705.        Compiler. In Deutschland erhält man SAS/C bei
  706.                 SAS Institute GmbH
  707.                 Postfach 10 53 40
  708.                 69043 Heidelberg
  709.                 Deutschland
  710.             
  711.                 Telefon: 06221/4160
  712.                 EMail: eurdoc2@vm.sas.com
  713.   
  714.        Dice bietet wie SAS einen Sonderpreis für Schüler und Studenten
  715.        von ca. 130.-DM. Der Compiler ist stabil und vor allem sehr
  716.        schnell.  Der größte Nachteil von Dice ist (verglichen mit den
  717.        anderen kommerziellen Compilern) der Debugger, ein sogenannter
  718.        Source-Line-Debugger: Dies bedeutet, daß man den Quelltext sieht
  719.        und das Programm Schritt für Schritt abarbeiten kann, aber leider
  720.        nur Speicher und nicht etwa bestimmte Variablen anzeigen kann.
  721.        Informationen über Dice: info@oic.COM.
  722.   
  723.        Comeau C++ ist ebenfalls ein Crosscompiler, was an und für sich
  724.        kein Problem wäre. Aber Comeau C++ hat keinen integrierten
  725.        C-Compiler, man braucht also zusätzlich SAS-C, Aztec-C oder Dice.
  726.        Dafür ist er kompatibel zu AT&T cfront 3.0, unterstützt
  727.        Exceptions und läuft wie `gcc' auf vielen verschiedenen Systemen.
  728.        In Deutschland wird auch Maxxon C++ angeboten, über das ich
  729.        nichts sagen kann. Beide Compiler sind kommerziell. Comeau's
  730.        Adresse ist:
  731.                 Comeau computing
  732.                 91-34, 120th Street
  733.                 Richmond Hill, NY, 11418-3214
  734.                 USA
  735.             
  736.                 EMail: Greg Comeau, comeau@bix.com
  737.   
  738.   *Forth*
  739.        JForth soll eine exzellente Forth-Version sein. Unter anderem
  740.        enthält es objektorientierte Erweiterungen, ein volles
  741.        Amiga-Interface und einen Anwendungsgenerator. Es ist erhältlich
  742.        von:
  743.                 Delta Research
  744.                 P.O. Box 151051
  745.                 San Rafael, CA   94915-1051
  746.             
  747.                 Phone: (415) 453-4320
  748.                 EMail: Phil Burk, phil@ntg.com
  749.                        Mike Haas, haas@starnine.com
  750.   
  751.   *Fortran*
  752.        (Seufz! Es gibt immer noch Leute, die es brauchen :-<) Frei
  753.        kopierbar sind BCF (Fish disk 470) und f2c, der Fortran in
  754.        C-Quelltext umwandelt.  (Aminet, Directory `/dev/lang'). Ein
  755.        kommerzieller Compiler ist von ABSoft erhältlich. Allerdings sind
  756.        dies alles nur Fortran-77-Compiler, es gibt keine
  757.        Fortran-90-Compiler auf dem Amiga.
  758.   
  759.   *Lisp*
  760.        Frei kopierbare Lisp-Interpreter sind XLisp (Fish-Disk 181) und
  761.        OakLisp (Fish-Disks 519 und 520) und CLISP
  762.        (`/pub/lisp/clisp/binaries/amiga' at
  763.        `ma2s2.mathematik.uni-karlsruhe.de'). Auch Compiler gibt es: Gambit
  764.        (Fish-Disks 764 und 765) sowie Scheme-to-C (Fish-Disks 556-558).
  765.        Von Interesse ist vielleicht eine Mail-Liste: Senden Sie dazu eine
  766.        Mail mit dem Wort `Subscribe' an `amigalisp@contessa.phone.net'.
  767.   
  768.   *Prolog*
  769.        `/dev/lang/UNSWProlog.lha' und `dev/lang/sbp3_1e' auf dem Aminet
  770.        sowie `SBProlog' auf der Fish-Disk 141 und `SBProlog' auf der
  771.        Fish-Disk 145 sind frei kopierbare Prolog-Interpreter.
  772.   
  773.   *Modula-2*
  774.        M2Amiga wird in Europa und Benchmark Modula-2 in den USA
  775.        angeboten. Beide sollen sehr gut sein und sowohl über gute
  776.        Source-Level-Debugger als auch eine umfangreiche Bibliothek
  777.        verfügen. Besonders M2Amiga wird sehr gut unterstützt durch eine
  778.        deutsche Benutzergruppe (AMOK), die z.B. eine eigene PD-Serie
  779.        anbieten. Siehe Mail-Listen.
  780.   
  781.        M2Amiga bekommt man bei
  782.                 A+L AG
  783.                 Daderiz 61
  784.                 2540 Grenchen
  785.                 Schweiz
  786.             
  787.                 Tel.: +41/65/52 03-11
  788.                 Fax:              -79
  789.   
  790.        und Benchmark Modula-2 ist erhältlich von:
  791.                 Armadillo Computing
  792.                 5225 Marymount Drive
  793.                 Austin, Texas 78723
  794.                 USA
  795.             
  796.                 Phone/FAX: 512/926-0360.
  797.                 EMail: Jim Olinger, jolinger@bix.com
  798.   
  799.   *Oberon*
  800.   *Oberon-2*
  801.        Es gibt zwei Oberon-2-Compiler für den Amiga: AmigaOberon ist wie
  802.        M2Amiga von A+L und kommerziell. Der Compiler kommt mit einer
  803.        integrierten Entwicklungsumgebung (incl. freikonfigurierbarem
  804.        Editor) und umfangreicher Modulbibliothek. Library Linker zum
  805.        einfachen Erzeugen von AmigaOS Shared Libraries sowie Run-time
  806.        Source-Level-Debugger sind ebenfalls erhältlich.
  807.   
  808.        Oberon-A ist ein Freeware-Compiler, allerdings erst in einer
  809.        Beta-Version, insbesondere sind die Modulbibliotheken
  810.        unvollständig. (Quelle: Aminet, Directory `dev/obero'). Siehe
  811.        Mail-Listen.
  812.   
  813.        Für beide Compiler gibt es Unmengen von Modulen und Bsp.-Sourcen
  814.        auf AMOK-Disks.
  815.   
  816.   *Pascal*
  817.        Es gibt einen PD-Compiler namens PCQ (Aminet, Directory `dev/lang'
  818.        oder Fish-Disk 511), der allerdings kein voller Pascal-Compiler
  819.        ist und dem sehr wesentliche Dinge fehlen. P2C konvertiert Pascal
  820.        in C und ist auf der Fish-Disk 341 zu finden. (Aminet:
  821.        `/dev/misc/p2c120.lha') Ferner gibt es zwei kommerzielle Compiler
  822.        namens HiSoft-Pascal (von der gleichnamigen Firma) und KickPascal
  823.        von Maxxon. HiSoft und P2c behaupten, kompatibel zu Turbo-Pascal
  824.        5.0 zu sein. HiSoft hat außerdem einen guten
  825.        Source-Level-Debugger.
  826.   
  827.   3.6 Warum funktioniert keine Esc-Sequenz?
  828.   =========================================
  829.   
  830.      Viele Drucker kommen mit einem Handbuch, das erklärt, welche
  831.   Esc-Sequenzen welche Funktion auslösen. Aber wenn man diese Sequenzen
  832.   dann einmal ausprobiert, passieren oft merkwürdige Sachen, nämlich
  833.   entweder gar nichts oder etwas ganz anderes, als geplant war. Und das
  834.   hat auch einen Grund, nämlich die Amiga-Druckertreiber. Diese Treiber
  835.   sind so gebaut, daß sie nur einen bestimmten Satz `ANSI-Esc-Sequenzen'
  836.   verstehen, nicht die (verschiedenen) druckereigenen, von den
  837.   verschiedenen Druckerherstellern definierten. Der Sinn dabei ist, daß
  838.   jede Anwendung auf dem Amiga nur diesen einen Standardsatz an Sequenzen
  839.   verwendet und so nicht zu wissen braucht, welcher Drucker tatsächlich
  840.   angeschloßen ist. Der Druckertreiber übersetzt dann diese
  841.   Standardsequenzen in die druckereigenen. Eine Liste der verfügbaren
  842.   ANSI-Esc-Sequenzen findet sich im aktuellen Workbench-Handbuch (oder in
  843.   älteren AmigaDOS-Handbüchern). Wenn Du nun eine Steuersequenz an den
  844.   Drucker schicken willst, die es nicht als ANSI-Sequenz gibt, so hast Du
  845.   zwei Möglichkeiten, dies doch zu erreichen:
  846.     1. Umgeh den Druckertreiber (der erfolglos versuchen würde, die
  847.        Sequenz zu interpretieren oder zu übersetzen) und sende die
  848.        Ausgabe *nur* für die Länge dieser Sequenz an `PAR:' (bzw.
  849.        `SER:'). Dabei muß man die Druckerausgabekanäle umständlich oft
  850.        umschalten, und man muß wissen, wo der Drucker angeschlossen ist
  851.        (`PAR:' oder `SER:').
  852.   
  853.     2. Benutze eine spezielle ANSI-Sequenz, genau für diesen Fall
  854.        gedacht:
  855.                 `Esc[<n>"<x>'
  856.        wobei `<n>' die dezimal geschriebene Anzahl an Bytes in der Sequenz
  857.        `<x>' ist, die gerade die spezielle Drucker-Sequenz enthält. Diese
  858.        ANSI-Sequenz sagt dem Druckertreiber, daß er die nächsten `<n>'
  859.        Bytes nicht interpretieren oder übersetzen soll.
  860.           Aber beide Methoden haben einen grossen Nachteil, wenn sie in
  861.   einem Anwendungsprogramm verwendet werden: Man verliert die
  862.   Druckerunabhängigkeit! Solange man sich an die ANSI-Sequenzen hält,
  863.   kann man jeden Drucker der Welt ansteuern, solange es einen
  864.   Amiga-Druckertreiber für ihn gibt.  Wenn man anfängt, druckereigene
  865.   Sequenzen zu verwenden, ist das Programm an diesen einen Druckertyp
  866.   gebunden und mit keinem anderen benutzbar (oder man müßte einige
  867.   dutzend neue Druckertreiber für dieses Programm erstellen).
  868.   
  869.      Dr. Peter Kittel, peterk@cbmger.de.so.commodore.com
  870.   
  871.   3.7 Kann ich AmigaBasic auf dem A1200 verwenden?
  872.   ================================================
  873.   
  874.      Letztens ging eine Kontroverse über AmigaBasic durch die Netze: Ich
  875.   sagte, auf dem A1200 läuft es einigermaßen problemlos, jemand anders
  876.   berichtete, daß es bei jedem kleinsten Fehler sofort komplett
  877.   abstürzt, was ich nicht nachvollziehen konnte.
  878.   
  879.      Jetzt kann ich es: Es liegt am Sound-Prefs-Editor. Wenn man in ihm
  880.   die Sound-Ausgabe ganz abschaltet, kann man mit AmigaBasic arbeiten.
  881.   Wenn hier ein Sound (z. B. Piepsen) angewählt ist, kollidiert das mit
  882.   dem Sound, den AmigaBasic offensichtlich zu Fuß und nicht ganz korrekt
  883.   selber erzeugen will, bumm.
  884.   
  885.      Abhilfe also:
  886.     1. Im Sound-Editor den Ton abstellen.
  887.   
  888.     2. Auf einem A4000 (oder einem A1200 mit Fast-RAM-Erweiterung (1))
  889.        muß man zusätzlich NoFastMem aktivieren.
  890.   
  891.     3. Möglichst SUBs vermeiden und stattdessen herkömmliche GOSUBs
  892.        benutzen, dann ist die Kompatibilität zu neueren Prozessoren
  893.        höher.
  894.   
  895.      Dr. Peter Kittel, peterk@cbmger.de.so.commodore.co
  896.   
  897.      ---------- Footnotes ----------
  898.   
  899.      (1)  Nur bei einem zusätzlichen Prozessor
  900.   
  901.   3.8 Wie lokalisiere ich mein Programm?
  902.   ======================================
  903.   
  904.      Nehmen wir an, wir wollen ein `HelloLocalWorld.c' schreiben. Das
  905.   letztendliche Programm sieht dann ungefähr so aus:
  906.   
  907.            #include "HelloLocalWorld_Cat.h"
  908.            #include <clib/exec_protos.h>
  909.        
  910.            struct Library *LocaleBase;
  911.        
  912.            void main(int argc, char *argv[])
  913.        
  914.            {
  915.                /* Öffne die locale.library. (Kein Abbruch, wenn sie nicht
  916.                   da ist, weil dann einfach die eingebauten Strings verwendet
  917.                   werden. Aus diesem Grund auch keine Verwendung des
  918.                   AutoOpening, auch wenn es der Compiler beherrscht.)
  919.                */
  920.                LocaleBase = OpenLibrary("locale.library", 38);
  921.                OpenHelloLocalWorldCatalogs(NULL, NULL);
  922.        
  923.                printf(GetString(MSG_Hello));
  924.        
  925.                CloseHelloLocalWorldCatalog();
  926.                if (LocaleBase) CloseLibrary(LocaleBase);
  927.            }
  928.   
  929.      Die Funktion GetString prüft, ob die gewünschten Kataloge
  930.   vorhanden sind und liefert einen Zeiger auf einen String, entweder den
  931.   eingebauten oder den Katalogstring. (In unserem Fall den deutschen
  932.   String.)
  933.   
  934.      Der Hauptunterschied zum gewohnten HelloWorld.c ist also (abgesehen
  935.   von der minimalen Initialisierung und dem Gegenstück am Programmende),
  936.   Strings durch einen Funktionsaufruf zu ersetzen. Man braucht also eine
  937.   Datei `HelloLocalWorld_Cat.c', die die Funktionen OpenHelloLocalWorld,
  938.   GetString, CloseHelloLocalWorld_Cat.h und die eingebauten Strings
  939.   enthält (dies könnte ein Array sein, das unter anderem
  940.                array[MSG_Hello] = "Hello, local world.\n";
  941.   
  942.   enthält) und ein Includefile `HelloLocalWorld_Cat.h', das die ID's wie
  943.   MSG_Hello definiert. Es ist nicht nötig zu wissen, wie diese Dateien
  944.   intern arbeiten, insbesondere benötigt man auch keine Kenntnis der
  945.   `locale.library'!
  946.   
  947.      Dazu gibt es verschiedene Kataloggeneratoren (im Folgenden KG),
  948.   nämlich `CatComp' (nur für Developer), `KitCat' (nur deutsche
  949.   Dokumentation, was hierzulande kein Problem ist), `MakeCat' (das ich
  950.   nicht kenne) und `FlexCat' (das ich empfehle, einerseits, weil es sehr
  951.   flexibel im erzeugten Source ist und z.B. Lokalisierung unter 2.0 sowie
  952.   beliebige Programmiersprachen unterstützt, selbst Amiga-E, Cluster,
  953.   Pascal, ... und andererseits, weil es von mir ist ;-) ), die diese
  954.   Dateien sowie die Kataloge erzeugen. (Der obige Quelltext könnte je
  955.   nach KG leicht unterschiedlich aussehen.) Siehe Aminet, directory
  956.   `dev/misc'.
  957.   
  958.      Wie funktionieren diese KGs? Zunächst erzeugt man eine sogenannte
  959.   `Katalogbeschreibung' (`Catalog description'), die so aussehen könnte:
  960.            ; Mit einem Semikolon beginnende Zeilen sind Kommentare
  961.            # language english
  962.            ; die Sprache der eingebauten Strings
  963.            # version 0
  964.            ; die Katalogversion (0 = beliebig)
  965.            MSG_Hello (1/15/30)
  966.            Hello, local world
  967.   
  968.   Jeder String wird durch zwei Zeilen wie die letzten beiden definiert:
  969.   MSG_Hello ist die String-ID, (1/15/30) gibt den Wert der ID sowie die
  970.   minimale und maximale Länge an. (Diese Argumente können auch
  971.   weggelassen werden, in welchem Fall einfach die nächste freie ID
  972.   verwendet wird.)
  973.   
  974.      Nun schreiben wir das Programm. Sobald es fertig ist, wird mit dem
  975.   KG eine sogenannte Katalogübersetzung (eine für jede andere Sprache
  976.   als die eingebaute) erzeugt, die so aussehen könnte:
  977.            ; Mit einem Semikolon beginnende Zeilen sind Kommentare
  978.            ## language deutsch
  979.            ; the catalog language
  980.            ## version $VER: Deutsch.catalog 1.0 (22.12.93)
  981.            ; the catalog files version string
  982.            MSG_Hello
  983.        
  984.            ; Hello, local world
  985.   
  986.   Beachten Sie die leere Zeile nach der String-ID! (Die Argumente von ##
  987.   language und ## version wären vielleicht leer.) Hier müssten jetzt
  988.   die deutschen Strings eingesetzt werden. Mit dem KG wird daraus dann
  989.   der eigentliche `Katalog' erzeugt. (Beachten Sie auch, daß hier die
  990.   Angaben über String-ID und Stringlänge fehlen: Sie werden aus der
  991.   Katalogbeschreibung übernommen.
  992.   
  993.      Wenn das Programm verändert wird (neue Strings, andere Längen) und
  994.   die Katalogbeschreibung sich damit ebenfalls ändert, dann kann der KG
  995.   analog benutzt werden, um auch die Katalogübersetzung und damit den
  996.   Katalog auf den neuesten Stand zu bringen.
  997.   
  998.   3.9 Wie erhält man einen Zeiger auf das Fenster einer Konsole?
  999.   ==============================================================
  1000.   
  1001.      Die folgende Funktion liefert den Window-Zeiger eines CON-Fensters.
  1002.   Sie kann unter allen Versionen des Amiga-OS ausgeführt werden.
  1003.   
  1004.          struct Window *getConWindowPtr(BPTR fh)
  1005.          {
  1006.            struct Window *w;
  1007.            struct FileHandle *cfh;
  1008.            struct StandardPacket *sp;
  1009.            struct InfoData *id;
  1010.            struct MsgPort *mp;
  1011.        
  1012.            w = NULL;
  1013.        
  1014.            if ((cfh = BADDR(fh))->fh_Type != NULL) {
  1015.              if (sp = AllocMem(sizeof (struct StandardPacket),
  1016.                               MEMF_PUBLIC | MEMF_CLEAR)) {
  1017.                if (id = AllocMem(sizeof (struct InfoData),
  1018.                                 MEMF_PUBLIC | MEMF_CLEAR)) {
  1019.                  if (mp = CreatePort(NULL, 0)) {
  1020.                    sp->sp_Msg.mn_Node.ln_Name = (char *) &sp->sp_Pkt;
  1021.                    sp->sp_Pkt.dp_Link         = &sp->sp_Msg;
  1022.                    sp->sp_Pkt.dp_Port         = mp;
  1023.                    sp->sp_Pkt.dp_Type         = ACTION_DISK_INFO;
  1024.                    sp->sp_Pkt.dp_Arg1         = MKBADDR(id);
  1025.        
  1026.                    PutMsg(cfh->fh_Type, &sp->sp_Msg);
  1027.                    (void) WaitPort(mp);
  1028.                    (void) GetMsg(mp);
  1029.        
  1030.                    if (sp->sp_Pkt.dp_Res1)
  1031.                      w = (struct Window *) id->id_VolumeNode;
  1032.        
  1033.                    DeletePort(mp);
  1034.                  }
  1035.                  FreeMem(id, sizeof (struct InfoData));
  1036.                }
  1037.                FreeMem(sp, sizeof (struct StandardPacket));
  1038.              }
  1039.            }
  1040.        
  1041.            return w;
  1042.          }
  1043.   
  1044.      Anmerkungen:
  1045.      * Auf ein CON-Fenster direkt zuzugreifen kann Konflikte mit Aktionen
  1046.        des CON-Handlers hervorrufen. Seien Sie vorsichtig!
  1047.   
  1048.      * Um den Window-Zeiger einer CLI-Konsole zu erhalten, übergibt man
  1049.        ein durch Open("*", MODE_OLDFILE) gewonnenes FileHandle an obige
  1050.        Funktion.
  1051.   
  1052.      * Das Ergebnis der obigen Funktion kann sehr wohl NULL sein, etwa im
  1053.        Falle eines AUX-Handlers oder falls ein AUTO-CON-Handler sein
  1054.        Fenster nicht öffnen kann.
  1055.   
  1056.      * Schickt man ein ACTION_DISK_INFO-Paket an einen AUTO-CON-Handler
  1057.        (2.0+), so verliert dessen Fenster seine speziellen
  1058.        AUTO-Eigenschaften (es kann also nicht mehr durch das Betätigen
  1059.        des Close-Gadgets geschlossen werden), weil der in id_VolumeNode
  1060.        gelieferte Window-Zeiger gültig bleiben muß.
  1061.   
  1062.      * Alles in allem: Verwenden Sie diese Funktion nicht. :-)
  1063.   
  1064.      Weitere Informationen finden Sie auf den Seiten 273, 276, 435, 463,
  1065.   485 und 629 im "Amiga Guru Book" (siehe Dokumentation).
  1066.   
  1067.      Ralph Babel, rbabel@babylon.pfm-mainz.de
  1068.   
  1069.   3.10 Was sind Pragmas?
  1070.   ======================
  1071.   
  1072.      Pragmas sind spezielle Anweisungen an den C-Compiler.  Zwei Probleme
  1073.   entstehen bei der Verwendung von Pragmas:
  1074.     1. Pragmas sind hochgradig compilerspezifisch. Nicht einmal die
  1075.        Amiga-Compiler haben dieselben Pragmas, selbst wenn damit das
  1076.        gleiche bewirkt wird.
  1077.   
  1078.     2. Man kann sich nicht darauf verlassen, daß ein Compiler Pragmas
  1079.        ignoriert, die er nicht versteht. Dies gilt selbst dann, wenn man
  1080.        einen Ausdruck wie den folgenden verwendet:
  1081.                 #ifndef MY_COMPILER
  1082.                 #pragma DoAnything
  1083.                 #endif
  1084.   
  1085.   Das letztere Problem läßt sich umgehen, indem man Pragmas wie folgt
  1086.   in eigene Include-Files setzt. (Das gleiche gilt übrigens auch für
  1087.   Präprozessor-Kommandos wie #asm (Aztec-C) oder #extern (C++).)
  1088.            #ifndef MY_COMPUTER
  1089.            #include <mypragmas.h>
  1090.            #endif
  1091.   
  1092.      Aber was machen Pragmas auf dem Amiga? Meistens werden sie verwendet,
  1093.   um dem Compiler mitzuteilen, wie gewisse Library-Funktionen aufgerufen
  1094.   werden. (Tatsächlich wird fast immer diese Verwendung gemeint, wenn
  1095.   Amiga-Besitzer über Pragmas sprechen.) Gewöhnliche C-Funktionen
  1096.   erwarten ihre Argumente auf dem Stack, Library-Funktionen dagegen in
  1097.   bestimmten Registern. Ferner erwarten sie den `Library-Base-Pointer' in
  1098.   Register a6.  Betrachten wir eine Pragma-Anweisung von Aztec-C:
  1099.            #pragma amicall(SysBase,0xd2,FreeMem(a1,d0))
  1100.   
  1101.   Dies weist den Compiler an, das erste Argument in Register a1 und das
  1102.   zweite in d0 zu laden. Ferner wird der Inhalt der Variablen SysBase in
  1103.   Register a6 geladen. Maxon-Pragmas sehen genauso aus, Dice- und
  1104.   SAS-Pragmas sind allerdings etwas komplizierter:
  1105.            #pragma libcall SysBase FreeMem d2 0902
  1106.   
  1107.   Hier ist d2 (wie 0xd2 oben) der `Library-Vektor-Offset' (siehe
  1108.   nächstes Beispiel). Die letzte Ziffer ist die Zahl der Argumente, die
  1109.   davorstehende 0 ein Code für das Register mit dem Ergebnis und die
  1110.   davor stehenden Ziffern sind Codes für die Register mit den Argumenten
  1111.   in verkehrter Reihenfolge. (Die Codes bedeuten 0=d0, 1=d1, .., 8=a0,
  1112.   9=a1, a=a2, ..)
  1113.   
  1114.      Ein Kommando wie `FreeMem(fib,sizeof(*fib);' würde ein Compiler nun
  1115.   in folgenden Code übersetzen:
  1116.            move.l  _fib,a1
  1117.            move.l  260,d1        ; sizeof(struct FileInfoBlock)
  1118.            move.l  _SysBase,a6
  1119.            jsr     -0xd2(a6)       ; 0xd2 = _LVOFreeMem
  1120.   
  1121.   FreeMem in dieser Art aufzurufen ist kürzer und schneller als
  1122.   zunächst die Argumente auf den Stack zu legen und dann eine Funktion
  1123.   _FreeMem aufzurufen, die letzten Endes doch nur dasselbe tun und die
  1124.   Argumente vom Stack in dieselben Register laden würde.
  1125.   
  1126.      Das Portierungsproblem der Pragmas umgeht man, indem man sie
  1127.   folgendermaßen in den eigenen Quelltext einbindet:
  1128.            /*    Lade den Funktionsprototyp. Dieser ist nicht vom    */
  1129.            /*    verwendeten Compiler abhängig.                */
  1130.            #include <clib/exec_protos.h>
  1131.        
  1132.            /*    Pragmas sind vom Compiler abhängig, aber wenigstens    */
  1133.            /*    die Namen der Dateien mit Pragmas sind relativ        */
  1134.            /*    einheitlich.                        */
  1135.            #ifdef AZTEC_C
  1136.            #include <pragmas/exec_lib.h>
  1137.            #endif
  1138.            #if defined(__SASC) || defined(_DCC) || defined(__MAXON__)
  1139.            #include <pragmas/exec_pragmas.h>
  1140.            #endif
  1141.            #ifdef __GNUC__
  1142.            #include <inline/exec_lib.h>
  1143.            #endif
  1144.   
  1145.   Das obige Beispiel kann problemlos mit allen angegebenen Compilern
  1146.   verwendet werden und produziert optimalen Code.
  1147.   
  1148.      Eine abschließende Frage bleibt allerdings: Wie bekommt man die
  1149.   Pragmas?  Die meisten Compiler haben bereits fertige Pragmas im
  1150.   Lieferumfang.  Allerdings hilft das nicht, wenn man z.B. eine neue
  1151.   Library benutzen möchte oder nur die Pragmas einer veralteten Version
  1152.   hat. In diesem Fall kann man die Pragmas selbst aus den sogenannten
  1153.   `FD'-Files erzeugen.  Dazu haben die meisten Compiler ein Utility
  1154.   namens `fd2pragma'.  (Das NDU hat z.B. ein Directory namens FD, in dem
  1155.   die FD-Files aller Libraries und Devices des OS enthalten sind. siehe
  1156.   Include-Dateien) Es gibt auch ein frei kopierbares fd2pragma, das
  1157.   Pragmas für Aztec, Dice, SAS und Maxon sowie LVO-Files für den
  1158.   Aztec-Assembler und eventuelle Tag-Versionen produziert. (Aminet,
  1159.   `dev/misc/fd2pragma2_0.lha' oder auf den Fish-CDs)
  1160.   
  1161.      Für Pragmas unter dem gcc siehe Inline-Dateien.
  1162.   
  1163.   3.11 Mein Compiler/Linker vermißt Symbole.
  1164.   ==========================================
  1165.   
  1166.      Zunächst sollte man sich versichern, daß die Funktion tatsächlich
  1167.   fehlt: Z.B. Floating-Point-Funktionen befinden sich in einer speziellen
  1168.   Link-Library, die erst mit der Option `-lm' eingebunden wird.  Ferner
  1169.   kann es eine fehlende Variable sein: Wenn man z.B. ohne es zu bemerken
  1170.   eine Intuition-Funktion benutzt, dann wird der Linker über das Fehlen
  1171.   eines Symbols `IntuitionBase' klagen. In diesem Fall muß man also
  1172.   lediglich das Folgende irgendwo im globalen Teil seines Quelltextes
  1173.   einbauen:
  1174.            struct Library *IntuitionBase;
  1175.   
  1176.   (Und vergessen Sie nicht, die Library mit OpenLibrary() zu eröffnen und
  1177.   mit CloseLibrary() zu schließen!) :-)
  1178.   
  1179.      Allerdings könnte die Funktion natürlich tatsächlich fehlen. Wenn
  1180.   man zum Beispiel nur die Version 2.0 der amiga.lib hat, dann fehlen
  1181.   etwa die Locale-Funktionen oder die Memory-Pool-Funktionen, obwohl sie
  1182.   prinzipiell verwendbar sind. (1) Die einfachste (und beste) Lösung
  1183.   ist, das sogenannte NDU zu kaufen.  Siehe Include-Dateien. Wer nicht
  1184.   solange warten möchte, für den ist die Frage, welche Art von Funktion
  1185.   in seiner Link-Library fehlt:
  1186.      * Einfache Amiga-Library-Funktionen (z.B. `exec/AllocPooled' oder
  1187.        `locale/OpenCatalogA') kann man mit Pragmas aufrufen und braucht
  1188.        dann lediglich Informationen über die Aufrufkonventionen
  1189.        (Library-Base, Library-Vektor-Offset und Argumentregister)
  1190.   
  1191.      * Tag-Funktionen sind meistens einfach Zwischenfunktionen, die ihre
  1192.        Argumente auf dem Stack erwarten und dann die eigentliche
  1193.        Library-Funktion aufrufen. Wenn man z.B. die Funktion
  1194.        `dos/AllocDosObject', die eine Konstante und einen Zeiger auf ein
  1195.        Array als Argumente erwartet, nach der obigen Methode konstruiert
  1196.        hat, dann hat man damit auch ihre Stack-Variante! Dazu erzeugt man
  1197.        einfach die folgende Funktion:
  1198.                 #include <clib/dos_protos.h>
  1199.                 #include <pragmas/dos_pragmas.h>    /*  Evtl. anderer Name    */
  1200.             
  1201.                 void *AllocDosObjectTags(ULONG objtype, Tag tag1, ...)
  1202.                 { return(AllocDosObject(objtype, (struct TagItem *) &tag1);
  1203.                 }
  1204.   
  1205.        Mit fd2pragma kann das auch automatisch geschehen. Siehe Pragmas.
  1206.   
  1207.      * Einige Funktionen bleiben aber noch übrig: Amiga.lib enthält
  1208.        nämlich auch Funktionen, die für sich selbst interessant sind,
  1209.        z.B. die BOOPSI-Funktionen (`DoMethod', `DoSuperMethod'), die
  1210.        Memory-Pool-Funktionen (`LibAllocPooled', `LibCreatePool', die
  1211.        Ersatz für entsprechende 3.0-Funktionen sind) oder `HookEntry',
  1212.        das sehr hilfreich bei der Programmierung von Hooks ist. Diese
  1213.        kann man nur durch entsprechende, disassemblierte und neu
  1214.        assemblierte oder compilierter Versionen ersetzen. Im
  1215.        AmigaFAQ-Archiv sind einige dieser Funktionen bereits enthalten.
  1216.   
  1217.      ---------- Footnotes ----------
  1218.   
  1219.      (1)  Dieses Problem  betrifft vor allem Besitzer von Aztec-C, das
  1220.   seither nicht weiter unterstützt wird und von Dice, der manchmal etwas
  1221.   unvollständig ist. Ich besitze beide ..
  1222.   
  1223.   3.12 Wie erfahre ich, was für Funktionen es gibt?
  1224.   =================================================
  1225.   
  1226.      Wenn Sie sich über den Namen einer für einen bestimmten Zweck
  1227.   geeigneten Funktion im Unklaren sind, dann gibt es folgende
  1228.   Möglichkeiten:
  1229.      * In den Autodocs der verschiedenen Libraries findet man am Anfang
  1230.        eine alphabetisch sortierte Tabelle aller Funktionen, die die
  1231.        betreffende Library bietet. Im Hauptteil findet man dann eine
  1232.        detaillierte Spezifikation aller Funktionen. Siehe Include-Dateien.
  1233.   
  1234.      * Die `.FD'-Dateien bieten eine sehr kompakte Übersicht über die
  1235.        Funktionen der diversen Libraries, sogar mit einer kurzen Angabe
  1236.        der Funktionsargumente. Wenn man schon grob weiß, wonach man
  1237.        sucht (z.B. nur die grobe Angabe der Argumente benötigt), dann
  1238.        findet man hier alle gewünschten Informationen. Siehe Pragmas.
  1239.   
  1240.      Dr. Peter Kittel, peterk@cbmger.de.so.commodore.com
  1241.   
  1242.   3.13 Der GNU C Compiler: Allgemeine Informationen und Installation
  1243.   ==================================================================
  1244.   
  1245.      Dieser Abschnitt enthält Informationen über den Amiga-Port des GNU
  1246.   C Compilers generell und die Installation insbesondere.
  1247.   
  1248.   3.13.1 Aktuelle Version
  1249.   -----------------------
  1250.   
  1251.      Die aktuelle gcc-Version ist 2.6.0 und an 2.6.1 wird gearbeitet.
  1252.   Sie enthält eine neue Version der ixemul.library (v40.3), aber man
  1253.   sollte sich wegen Fehlern, die sich auf 68000-Systemen bemerkbar
  1254.   machen, ixemul404.lha vom Aminet oder von meiner FTP-Site holen.
  1255.   Außerdem gibt es eine neue library, libnix, die das Benützen der
  1256.   ixemul.library verhindert.  2.6.1 wird Protos (wie bei SAS-C)
  1257.   enthalten, um das Kompilieren von SASC-Code unter gcc leichter zu
  1258.   machen.  Ein neuer Assembler, gas-2.5, ist enthalten, ein Paket namens
  1259.   q_anote ermöglicht die Ausgabe von gemischtem C/Asm-Code zu
  1260.   Debugging-Zwecken.  In Arbeit ist die Fähigkeit des Compilers, den
  1261.   Stack wachsen zu lassen, damit man vor dem Starten von gcc nicht mehr
  1262.   den Stack setzen muß.
  1263.   
  1264.   3.13.2 Hardwareanforderungen
  1265.   ----------------------------
  1266.   
  1267.      Jeder Amiga (vom A1000 bis zum A4000/40) ist prinzipiell in der
  1268.   Lage, die GNU-Utilities für AmigaDOS zu benutzen. Allerdings braucht
  1269.   man wenigstens 4MB RAM, um kleinere oder mittlere Projekte zu
  1270.   übersetzen, für größere (z.B. für gcc selbst) entsprechend mehr.
  1271.   Gigamem und VMM arbeiten mit gcc zusammen, es *könnte* also evtl.
  1272.   auch mit weniger gehen. Dazu braucht man aber eine MMU.  Siehe 68EC0xx.
  1273.   
  1274.      Eine volle Installation mitsamt C++ und Objective-C, inline-Dateien
  1275.   und Commodore Includes (siehe Include-Dateien) benötigt ca. 20 MB
  1276.   Platz auf der Festplatte.
  1277.   
  1278.      Kickstart 1.2/1.3 wird nicht mehr unterstützt. Wer KS 1.2/1.3 hat,
  1279.   sollte sich eine bessere Kickstart-Version kaufen.  Gcc arbeitet auch
  1280.   unter Kickstart 1.2/1.3, die volle Funktionalität ist aber erst ab
  1281.   Kickstart 2.x+ vorhanden. Eine schnelle CPU (z.B. 68030@25MHz oder
  1282.   besser) ist ebenfalls sinnvoll.
  1283.   
  1284.   3.13.3 Wer hat es gemacht?
  1285.   --------------------------
  1286.   
  1287.      Gcc und damit zusammenhängende Software wurde von den folgenden
  1288.   Personen auf den Amiga portiert (siehe Hilfe):
  1289.            Gcc v2.2.2:   Markus Wild
  1290.            Gcc v2.3.3:   Markus Wild
  1291.            Gcc v2.4.5:   Philippe Brand, Lars Hecking, Fred Fish
  1292.            Gcc v2.5.0 und später: Philippe Brand, Fred Fish, Leonard Norrgard
  1293.        
  1294.            Ixemul.library:    Markus Wild, Leonard Norrgard, R. Luebbert
  1295.            Libnix:           Matthias Fleischer, Gunther Nikl
  1296.                Gerlib:            Gerhard Müller
  1297.   
  1298.   3.13.4 Wo finde ich die gcc-Quelltexte?
  1299.   ---------------------------------------
  1300.   
  1301.      Alle gcc-Quelltexte und alle Binärdateien findet man auf:
  1302.   
  1303.     1. Aminet (wuarchive.wustl.edu und Mirror wie ftp.luth.se) in
  1304.        /pub/aminet/dev/gcc (siehe FTP)
  1305.   
  1306.     2. Ramses The Amiga Flying BBS:
  1307.                 +33-1-60037015  HST Dual v32 terbo 4800-21600
  1308.                     +33-1-60037713  SupraFax v32bis    4800-14400
  1309.                     +33-1-60037716  Tornado v22bis     1200-2400
  1310.        in Topic `Development', Area `Gcc' (are 156).
  1311.   
  1312.      Den originalen GNU-Quelltext bekommt man
  1313.   
  1314.     1. von denselben FTP-Servern wie die Binaries
  1315.   
  1316.     2. gnu.prep.ai.mit.edu (18.71.0.38) in `/pub/gnu'
  1317.   
  1318.     3. Ramses The Amiga Flying BBS in Topic
  1319.        `AmigaUnix/Unix/Linux/NetBSD', Area `Gnu Source Code'
  1320.   
  1321.      Diese Archive sollten alles Nötige enthalten, mit Ausnahme der
  1322.   Quelltexte der ixemul.library. Diese erhält man ebenfalls auf dem
  1323.   Aminet, Directory `dev/gcc'. (Zur Zeit ist die Version 40 der
  1324.   ixemul.library in Arbeit. Die Quelltexte werden am gleichen Ort sein.)
  1325.   
  1326.      Durch Richard Stallman, Free Software Foundation, ist festgelegt:
  1327.   
  1328.      "The GPL says that any distribution of binaries must contain either
  1329.   the source code or a written offer to supply source code (see the GPL
  1330.   for details of what is required)."
  1331.   
  1332.      Übersetzt: Die GPL (GNU General Public License) legt fest, daß jede
  1333.   Distribution entweder den Quelltext oder das schriftliche (oder
  1334.   geschriebene?) Angebot, diese zu liefern, enthalten muß. (Näheres
  1335.   siehe in der GPL.)
  1336.   
  1337.   3.13.5 Inline-Dateien
  1338.   ---------------------
  1339.   
  1340.      Die Inline-Dateien für den gcc kann man aus den originalen
  1341.   FD-Dateien von Commodore wie folgt erzeugen (Siehe Include-Dateien,
  1342.   siehe Pragmas):
  1343.   
  1344.        CLI> Assign INCLUDE: GCC:os-include
  1345.        CLI> Assign FD: INCLUDE:fd
  1346.        CLI> Makedir INCLUDE:inline
  1347.        CLI> cd USR:bin/geninline
  1348.        CLI> gen31
  1349.   
  1350.      Dies sollte alle Inline-Dateien in `GCC:os-include/inline' erzeugen.
  1351.   Falls man die 2.0- bzw. 3.0-Includes besitzt, sollte man gen20 bzw.
  1352.   gen30 benutzen. Inline-Dateien für OS3.1 (rev 40.13) sind in
  1353.   <gcc-aktuell> enthalten. Siehe Aktuelle Version.  (1)
  1354.   
  1355.      Auch mit dem Programm fd2inline kann man Inline-Dateien erzeugen:
  1356.   
  1357.        CLI> fd2inline <fd_file> <proto_file>
  1358.   
  1359.      ---------- Footnotes ----------
  1360.   
  1361.      (1)  Perl Skripte haben Schwierigkeiten, die Include-Dateien von
  1362.   AmigaDOS korrekt zu behandeln. Hier wäre etwas freiwillige Arbeit
  1363.   nötig ...
  1364.   
  1365.   3.13.6 Wie konvertiere ich die Amiga-Libraries für den gcc?
  1366.   -----------------------------------------------------------
  1367.   
  1368.      Ab gcc Version 2.6.0 werden dank den libnix-Autoren (Matthias
  1369.   Fleischer und Gunther Nikl) AmigaDOS Linklibraries unterstützt.
  1370.   
  1371.      Wenn man trotzdem eine gcc-Linklibrary generieren will, gibt es zwei
  1372.   Methoden:
  1373.   
  1374.      1. Mit hunk2gcc, dem AmigaDOS-Object-Konvertierer von Markus Wild.
  1375.   Dazu braucht man zunächst eine aktuelle Kopie der amiga.lib (aus dem
  1376.   NDU, siehe Include-Dateien). Nachdem man sich ein Directory für die
  1377.   konvertierten Dateien erstellt hat, wechselt man mit cd in dieses
  1378.   Directory und gibt das Folgende ein:
  1379.            hunk2gcc amiga.lib [..further libs if you like..]
  1380.   
  1381.   Dies erzeugt ein Objektfile wie a.out für jedes einzelne Modul, das
  1382.   die Library enthält. Diese Module muß man anschließend in einer
  1383.   gcc-Library zusammenfassen:
  1384.            ar qc libamiga.a obj.*
  1385.            ranlib libamiga.a
  1386.   
  1387.   Das Programm ranlib fügt eine Symboltabelle in die Library ein.
  1388.   (Dadurch wird der Zugriff auf die Library sehr viel schneller.)
  1389.   
  1390.      2. Eine libamiga.a mit libnix zu generieren ist recht leicht, braucht
  1391.   aber einige Zeit. Man dekomprimiere sources.lha aus dem libnix-Archiv
  1392.   und starte ein 'make libamiga.a'.
  1393.   
  1394.      *Beachte:* Solange man keine reinen AmigaDOS-Funktionen verwendet,
  1395.   kann man auch eine Pseudo-Library erzeugen:
  1396.          cat "int dummy;" >dummy.c
  1397.          gcc -c dummy.c
  1398.          ar crv libamiga.a dummy.o
  1399.          mv libamiga.a gcc:lib
  1400.   
  1401.   3.13.7 Wie installiere ich den gcc?
  1402.   -----------------------------------
  1403.   
  1404.     1. Falls dies die erste Installation von gcc ist:
  1405.   
  1406.        Mache das Folgende:
  1407.   
  1408.             cd ort_mit_sehr_viel_platz      ; ÄNDERN! Gib eine Schublade an
  1409.             makedir gnu
  1410.             lha x gcc260-base.lha           ; Der erste Teil, du brauchst ihn
  1411.   
  1412.        Jetzt mußt du `gnu/s/user-startup' an dein `S:User-Startup'
  1413.        anhängen (Ersetze Devel:GNU durch deinen eigenen Gnu Pfad).
  1414.   
  1415.        Weiter:
  1416.   
  1417.             execute gnu/s/user-startup     ; setzt wichtige Assigns
  1418.             copy gnu/envarc/#? ENVARC:
  1419.   
  1420.        *Ändere* die folgenden Zeilen!  Wenn du einen 68000- oder
  1421.        68010-Amiga hast, entferne das "-020" aus allen folgenden Zeilen!
  1422.   
  1423.             lha x gcc260-c-020.lha      ; Der C-compiler; du brauchst ihn
  1424.             lha x gcc260-doc.lha        ; Wenn du die Dokumentation zu gcc willst
  1425.             lha x gcc260-c++-020.lha    ; Wenn du C++ haben willst
  1426.             lha x gcc260-objc-020.lha   ; Wenn du Objective-C haben willst
  1427.             lha x gcc260-utils.lha      ; Wenn du zusätzliche Utilities haben willst
  1428.                                         ; (empfohlen zur Kompatibilität mit Unix)
  1429.             lha x gcc260-utilsdoc.lha   ; Wenn du Dokumentation zu allen Utilities willst
  1430.   
  1431.        Mit dem Script `restorelinks' mußt du Links generieren:
  1432.   
  1433.             sh /gnu/s/restorelinks      ; ÄNDERN! Füge " copy" an diese Zeile an,
  1434.                                         ; wenn du MakeLink nicht benützen willst,
  1435.                                         ; sondern Files lieber kopieren willst
  1436.   
  1437.        Schließlich:
  1438.   
  1439.             lha x gcc260-diffs.lha      ; Wenn du gcc neu kompilieren willst
  1440.             lha x gcc260-texi.lha       ; Wenn du Postscript-Doku generieren willst
  1441.   
  1442.        Auf zum nächsten Punkt und fröhliches Kompilieren!
  1443.   
  1444.     2. Wenn du ein Upgrade deiner gcc-Umgebung von v2.5.x machen willst,
  1445.        dearchiviere einfach gcc260-base.lha und gcc260-c-020.lha. Gehe
  1446.        sicher, daß du deine frühere ixemul.library löschst, wo sie
  1447.        sich auch befindet.  (Üblicherweise in `LIBS:')
  1448.   
  1449.   
  1450.      *Beachte*: Eine neue Version der ixemul.library wird verwendet, gehe
  1451.   bitte sicher, daß nirgends eine andere Kopie ist, die in Konflikt mit
  1452.   der neuen Version geraten kann.
  1453.   
  1454.   3.13.8 Kompilieren
  1455.   ------------------
  1456.   
  1457.      Wie wär's mit einem netten `Hello world'?
  1458.   
  1459.        #include <stdio.h>
  1460.        
  1461.        main()
  1462.        {
  1463.          printf("Hello World!\n");
  1464.        }
  1465.   
  1466.      Das war recht einfach ;-) Jetzt müssen wir es kompilieren.  Es gibt
  1467.   eine Menge Optionen in gcc, aber die einfachste Möglichkeit zu
  1468.   kompilieren ist:
  1469.   
  1470.        CLI> gcc -o hello hello.c
  1471.   
  1472.      Einfach?  Hier sind mehr Optionen:
  1473.   
  1474.      Ziel-Prozessoren von Motorola: Man kann reinen 68000 code, 68020,
  1475.   68030, 68040 und/oder 68881 kompilieren.  (Siehe Gcc-Dokumentation,
  1476.   Kapitel `Invoking Gcc/SubModel Options/M680X0 Options for Motorola
  1477.   specific compilation flags'.
  1478.   
  1479.        CLI> gcc -m68020 -m68881 -o hello hello.c
  1480.   
  1481.      Dies kompiliert Programme mit 68020 Code und direkten FPU-Befehlen
  1482.   und bindet mit den beschleunigten Libraries aus `GCC:lib/lib020'.
  1483.   
  1484.      Optimierung: Entweder du willst keine Optimierung oder du gibst `-O'
  1485.   an, das den Code optimiert, oder `-O2' für bessere Optimierung (Siehe
  1486.   die Dokumentation im Kapitel `Invoking Gcc/Optimize Options').
  1487.   Inzwischen gibt es auch eine `-O3' Option, die noch weiter geht.
  1488.   
  1489.        CLI> gcc -O2 -o hello hello.c
  1490.   
  1491.      Ein schnelles "Hello World" ;-)
  1492.   
  1493.      Codegenerierung: Vielleicht willst du residente Programme haben.
  1494.   Die Option dazu heißt `-resident'.
  1495.   
  1496.        CLI> gcc -resident -o hello hello.c
  1497.   
  1498.      Natürlich kannst du alle Optionen mischen, so etwa:
  1499.   
  1500.        CLI> gcc -O2 -m68020 -m68881 -resident -o hello hello.c
  1501.   
  1502.      Dies wird ein hoch optimiertes residentes Programm für 68020 und
  1503.   68881 ergeben.
  1504.   
  1505.      *Wichtig:* Wenn du nur AmigaOS-Funktionen verwendest oder aus
  1506.   irgendwelchen philosophischen Gründen keine ixemul.library verwenden
  1507.   willst, dann kannst du diese loswerden durch:
  1508.   
  1509.        CLI> gcc -noixemul -o foobar foobar.c
  1510.   
  1511.      natürlich nur, wenn du libnix hast (enthalten in gcc 2.6.0).
  1512.   
  1513.   3.13.9 Wichtige Informationsquellen
  1514.   -----------------------------------
  1515.   
  1516.      Der aktuelle Betreuer des Amiga-Ports von gcc ist:
  1517.            Philippe BRAND
  1518.            Fidonet: Ramses The Amiga Flying BBS 2:320/104.21
  1519.            Email:   phb@colombo.telesys-innov.fr (ONLY for personnal email).
  1520.            Ftp:     colombo.telesys-innov.fr:/pub/amigados-gnu
  1521.                     or /pub/incoming/uploads for uploads.
  1522.   
  1523.      Es gibt auch eine Mail-Liste in Finnland. Siehe Mail-Listen.
  1524.   Philippe Brand wird im Normalfall Fragen an diese Liste weiterleiten.
  1525.   
  1526.  
  1527.